home *** CD-ROM | disk | FTP | other *** search
/ PCDisk Magazine Disks / PCDisk Magazine - Disk 2.img / TTG.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1984-11-10  |  18.1 KB  |  501 lines

  1. 1   '                         TIC TAC GO!
  2. 2   '
  3. 3   'CONCEPT:                                   RON DUBREN
  4. 4   'IMPLEMENTATION:                            PETER SCHLAIFER
  5. 5   'PUBLISHER:                                 ZIFF/DAVIS|PC DISK MAGAZINE
  6. 6   'COPYRIGHT:                                 1984 ZIFF/DAVIS MAGAZINES
  7. 7   '
  8. 29   GOTO 1000
  9. 30   CLS
  10. 31  XFLAG%=1
  11. 50  ESC$=CHR$(27)
  12. 51   C="CSRLININKEY$ <0xDF!>BEEPUSINGPOINTWHILEWENDLINEOFFVARPTRCOLORCLS'<UNK! {FE22}>
  13. 52  '
  14. 70   GOSUB 3600                                'OPENERS...
  15. 71   GOTO 5000
  16. 1000  KEY OFF:SCREEN 0,0,0:WIDTH 80:COLOR 7:LOCATE ,,0:'NUMLOCK POKE
  17. 1005  DEF SEG = &H40:POKE &H17,PEEK(&H17) OR 32                  'NUMLOCK POKE
  18. 1010  CLEAR ,,2000
  19. 1020  GOSUB 1050
  20. 1030  GOTO 30
  21. 1040  '
  22. 1050  DEFINT I-Q:DEFSTR A-H,R-Z:DEFSNG U
  23. 1060  DEF FNA(X)=X+STRING$(LEN(X),29)+CHR$(31)                   'BACK TAB,LF
  24. 1070  DEF FNB(X)=FNA(LEFT$(X+X+X,PZ+PZ))                         'MAKE ROW OF X
  25. 1080  DEF FNC(X)=LEFT$(X+X+X+X+X+X,PZ*LEN(X))                    'BLOCK FROM ROW
  26. 1090  DEF FND(X)=LEFT$(X,LEN(X)-PZ-PZ-1)                         'TRIM BLOCK
  27. 1100  DEF FNE(X)=FND(FNC(FNB(X)))                                'BLOCK OF X
  28. 1110  '
  29. 1120  PZ=3                                                       'PATTERN SIZE
  30. 1130  NT=10                                                      'TIMED RESPONSE
  31. 1140  UF=50                                                      'DELAY FACTOR
  32. 1150  CP="CSRLINCSRLIN  "                                                  'PATTERN CHARS
  33. 1160  FMT=CHR$(31)+STRING$(2,28)+"&"                             'CELL OFFSET
  34. 1170  '
  35. 1180  X=FNA(STRING$(4,219)):X=X+X+X+X+X                          '10 SEC TIMER
  36. 1190  TMR=X+X:TICK=FNA(STRING$(4,32))
  37. 1200  '
  38. 1210  N=20:DIM G(N),LR(N),LC(N),LP(N)                            'ROW,COL,& PTR
  39. 1220  DIM M(N),P(N)                                              'MATCH & PATTER
  40. 1230  DIM R(4),T(10)                                             'ROW & TUNE
  41. 1240  '
  42. 1250  G(18)=" "+STRING$(14,196):X=FNA(CHR$(179))                 'GRID MARKS
  43. 1260  G(19)=FNA(" ")+X+X+X+X+X+X
  44. 1270  '
  45. 1280  T(0)="MBMNO3T120"                                          'TUNE PARAMS
  46. 1290  T(1)="L16FF+BBFF+B2"                                       'BEG OF ROUND
  47. 1300  T(2)="L64BB-AA-GG-FEE-DD-BBD-D-"                           'LOSS OF LIFE
  48. 1310  T(3)="L64FEFEFEFEFEFEFEFEFE"                               'NO ANSWER
  49. 1320  T(4)="L64DGBP8DGBP8GB8"                                    'CORRECT ANSWER
  50. 1330  T(5)="L32DGDGDGDG8"                                        'MADE GOALSCORE
  51. 1340  T(6)=T(5)                                                  'GET A LIFE
  52. 1350  T(7)="L16DGDG8"                                            'BEG OF DEAL
  53. 1360  '
  54. 1370  DATA " ROUND",1,3,1
  55. 1380  DATA "  DEAL",1,9,1
  56. 1390  DATA " GAMESCORE",1,18,0
  57. 1400  DATA "ROUNDSCORE",1,33,0
  58. 1410  DATA " GOALSCORE",1,48,50
  59. 1420  DATA " LIVES",1,63,3
  60. 1430  DATA " BONUS",1,74,400
  61. 1440  '
  62. 1450  FOR J = 11 TO 17:READ G(J),LR(J),LC(J),LP(J):NEXT
  63. 1460  '
  64. 1470  N=255*VAL(MID$(TIME$,4,2))                                 'RANDOMIZE
  65. 1480  RANDOMIZE N
  66. 1490  '
  67. 1500  FOR J = 0 TO 15:P(J)=J:NEXT                                'SHUFFLE PATS
  68. 1510  N=7:WHILE N>0:FOR I = N TO 15:FOR J = I-N TO 0 STEP -1
  69. 1520     IF RND>=0.5 THEN SWAP P(J),P(J+N) ELSE J=-1
  70. 1530     NEXT J,I:N=N\2:WEND
  71. 1540  '
  72. 1550  FOR J = 0 TO 9:LP(J)=J:NEXT                                'SHUFFLE GRID
  73. 1560  N=3:WHILE N>0:FOR I = N TO 8:FOR J = I-N TO 0 STEP -1
  74. 1570     IF RND>=0.5 THEN SWAP LP(J),LP(J+N) ELSE J=-1
  75. 1580     NEXT J,I:N=N\2:WEND
  76. 1590  '
  77. 1600  RETURN
  78. 1610  '
  79. 2000  IF PZ=LP(19) THEN RETURN ELSE LP(19)=PZ                    'INIT PZ
  80. 2010  P=4:ON PZ-1 GOTO 2020,2030,2040,2050,2060                  'TOP ROW
  81. 2020  P=P+6:GOTO 2060
  82. 2030  P=P+4:GOTO 2060
  83. 2040  P=P+3:GOTO 2060
  84. 2050  P=P+1
  85. 2060  LR(6)=P:LR(7)=P:LR(8)=P:P=P+PZ+1
  86. 2070  LR(3)=P:LR(4)=P:LR(5)=P:P=P+PZ+1
  87. 2080  LR(0)=P:LR(1)=P:LR(2)=P
  88. 2090  '
  89. 2100  P=41-PZ*3                                                  'LEFT COLUMN
  90. 2110  LC(6)=P:LC(3)=P:LC(0)=P:P=P+PZ+PZ+3
  91. 2120  LC(7)=P:LC(4)=P:LC(1)=P:P=P+PZ+PZ+3
  92. 2130  LC(8)=P:LC(5)=P:LC(2)=P
  93. 2140  '
  94. 2150  LR(9)=LR(3):LC(9)=8-PZ                                     'TARGET
  95. 2160  '
  96. 2170  X=LEFT$(G(18),PZ+PZ+3):Y=LEFT$(G(19),PZ+PZ+PZ+3)           'GRID OUTLINE
  97. 2180  TAC=X+X+X:TOE=Y+Y+Y
  98. 2190  Z=STRING$(PZ+PZ+3,29)+STRING$(PZ+1,30)
  99. 2200  TIC=X+Y+Z+Y+X
  100. 2210  '
  101. 2220  RUBOUT=FNE("    "):SOLID=FNE("CSRLINCSRLINCSRLINCSRLIN")
  102. 2230  RETURN                                                     'END OF INIT PZ
  103. 2240  '
  104. 2250  DATA 10,8,6,4,4,3,3,3,3,2,0
  105. 2260  READ NT:IF NT=0 THEN RESTORE 2250:GOTO 2260
  106. 2270  G(10)=LEFT$(TMR,NT*9-5)                                    'MAKE TIMER
  107. 2280  LR(10)=(LR(3)+LR(0))\2-NT\2+1:LC(10)=76                    '& PLACE IT
  108. 2290  RETURN
  109. 2300  '
  110. 2350  N=INT(RND*16)                                              'CUT
  111. 2360  FOR J = 0 TO 15:P(J)=(3*(P(J)+N)) MOD 16:NEXT              '& SHUFFLE P()
  112. 2370  RETURN
  113. 2380  '
  114. 2390  N=4^(PZ-2):FOR IG = 0 TO 8:GOSUB 2420:NEXT:RETURN          'FILL G(0...8)
  115. 2400  '
  116. 2410  N=4^(PZ-2):IG=9                                            'MAKE NOMATCH
  117. 2420  I=P(IG)                                                    'MAKE G(P(IG))
  118. 2421  IF I=0 AND NB=0 THEN I=P(15)                               'TO AVOID
  119. 2422  I=I*N+INT(RND*N)                                           'BLANK CELLS
  120. 2430  X="":FOR J = 1 TO PZ:X=X+R(I MOD 4):I=I\4:NEXT
  121. 2440  G(IG)=FND(X):RETURN
  122. 2460  '
  123. 2470  GOSUB 2350:GOSUB 2390:RETURN                               'INIT G(0...8)
  124. 2480  '
  125. 3000  LOCATE LR(IG),LC(IG):PRINT USING "&";G(IG);:RETURN         'PRINT DIRECT
  126. 3010  LOCATE LR(LP(IG)),LC(LP(IG)):PRINT USING FMT;G(IG);:RETURN 'PRINT INDIRECT
  127. 3020  LOCATE LR(IG),LC(IG):PRINT USING "&";X;:RETURN             'PRINT X
  128. 3030  LOCATE LR(IG),LC(IG):PRINT USING FMT;RUBOUT;:RETURN        'DIRECT R/O
  129. 3040  LOCATE LR(LP(IG)),LC(LP(IG)):PRINT USING FMT;RUBOUT;:RETURN'INDIRECT R/O
  130. 3050  '
  131. 3060  GOSUB 3170                                                 'PRINT LABELS,
  132. 3070  X=TIC:IG=9:GOSUB 3020:X=TAC:IG=3:GOSUB 3020:IG=0           'GRID,
  133. 3080  GOSUB 3020:X=TOE:IG=7:GOSUB 3020:IG=8:GOSUB 3020           '&
  134. 3090  IG=10:GOSUB 3000:RETURN                                    'TIMER
  135. 3100  '
  136. 3110  GOSUB 3000                                                 'PRINT LABEL
  137. 3120  X=CHR$(31)+SPACE$(LEN(G(IG))):Y=STR$(LP(IG))               'FORMAT &
  138. 3130  MID$(X,LEN(X)\2-LEN(Y)\2+2)=Y:GOSUB 3020:RETURN            'PRINT SCORE
  139. 3140  '
  140. 3150  FOR IG = 0 TO 8:GOSUB 3010:NEXT:RETURN                     'PRINT G(0...8)
  141. 3160  FOR IG = 11 TO 17:GOSUB 3120:NEXT:RETURN                   'PRINT SCORES
  142. 3170  FOR IG = 11 TO 17:GOSUB 3000:NEXT:RETURN                   'PRINT LABELS
  143. 3180  '
  144. 3190  FOR IG = 11 TO 17:GOSUB 3110:NEXT:RETURN                   'PRINT L & S
  145. 3200  '
  146. 3210  FOR IG = 0 TO 8                                            'FADE TO
  147. 3220     N=LP(IG)                                                'P,Q,& T
  148. 3230     IF N<>QM AND N<>PM THEN GOSUB 3040
  149. 3240     NEXT:RETURN
  150. 3250  '
  151. 3260  IG=9:GOSUB 3030:IG=PM:GOSUB 3030                           'FADE P,T,& Q
  152. 3270  IF QM<>PM AND QM>-1 AND QM<9 THEN IG=QM:GOSUB 3030
  153. 3280  RETURN
  154. 3290  '
  155. 3300  IG=0:WHILE LP(IG)<>QM:IG=IG+1:WEND                         'HILITE Q<>T
  156. 3310  COLOR 15:GOSUB 3010:COLOR 7
  157. 3320  RETURN
  158. 3330  '
  159. 3340  IG=9:COLOR 31:GOSUB 3010:COLOR 7:RETURN                    'HILITE Q=T
  160. 3350  '
  161. 3360  USECS=0.15:GOSUB 3440:IG=9:COLOR 15:GOSUB 3010:COLOR 7      'TURN OFF BLINK
  162. 3370  RETURN
  163. 3380  '
  164. 3390  LOCATE LR(10)+NT-NL,LC(10)                                 'CLEAR TIMER
  165. 3400  FOR J = 1 TO NL:PRINT USING "&";TICK;:NEXT
  166. 3410  RETURN
  167. 3420  '
  168. 3430  DEF SEG:POKE 106,0:DEF SEG = 0:POKE 1050,PEEK(1052):RETURN 'CLEAR KEYBUF
  169. 3440  FOR U = 1 TO USECS*1050:NEXT:RETURN                        'WAIT USECS
  170. 3450  '
  171. 3460  COLOR 15:IG=16:GOSUB 3110:COLOR 7:RETURN                   'HILIGHT LIVES
  172. 3470  '
  173. 3480  IG=13:GOSUB 3120                                           'UPDATE GAMESC
  174. 3490  COLOR 15:IG=14:GOSUB 3120:COLOR 7                          'HILITE RNDSC
  175. 3500  RETURN
  176. 3510  '
  177. 3520  RETURN
  178. 3530  '
  179. 3540  COLOR 15                                                   'HILIGHT
  180. 3550  IG=14:GOSUB 3110                                           'ROUND
  181. 3560  IG=15:GOSUB 3110                                           '& GOAL SCORES
  182. 3570  COLOR 7
  183. 3580  RETURN
  184. 3590  '
  185. 3600  GOSUB 2000:GOSUB 2250                                      'OPENERS...
  186. 3610  CLS:GOSUB 3060                                             'DISPLAY IT
  187. 3620  I=LR(3)+(PZ+1)\2:J=LC(3)+PZ
  188. 3630  PLAY T(0):PLAY T(1)
  189. 3640  COLOR 15:LOCATE I,J:PRINT "TIC";
  190. 3650  J=J+2*PZ+3:LOCATE I,J:PRINT "TAC";
  191. 3660  J=J+2*PZ+3:LOCATE I,J:PRINT "GO!"
  192. 3670  GOSUB 3090                                                 'HILITE TIMER
  193. 3680  USECS=0.2:X=TICK:LOCATE LR(10),LC(10)
  194. 3690  FOR J = 1 TO NT:GOSUB 3440:PRINT USING "&";TICK;:NEXT
  195. 3700  IG=9:G(IG)=SOLID:GOSUB 3010
  196. 3710  PLAY T(2)
  197. 3720  USECS=0.8:GOSUB 3440
  198. 3730  COLOR 7
  199. 3740  'FOR IG = 0 TO 9:GOSUB 3030:NEXT
  200. 3745  REM************************************INSERT SOUND OFF OPTION HERE*****
  201. 3746  REM************ IF SOUND_OFF THEN FOR J = 0 TO 7:T(J)="":NEXT
  202. 3750  RETURN
  203. 3760  '
  204. 4000  GOSUB 3430                                                 'CLEAR BUFFERS
  205. 4010  COLOR 7:GOSUB 3190                                         'LOLITE L & S
  206. 4020  PLAY T(7)
  207. 4030  COLOR 15:IG=12:GOSUB 3120:COLOR 7                          'HILITE DEAL
  208. 4040  GOSUB 3150                                                 'PRINT G(0...8)
  209. 4050  'USECS=.5:GOSUB 3400                                        'READY...
  210. 4060           IG=9:GOSUB 3010                                   'PRINT TARGET
  211. 4070  COLOR 15:IG=10:GOSUB 3090:COLOR 7                          'HILITE TIMER
  212. 4080  NL=NT:QM=-1:LOCATE LR(10),LC(10)                           'SET...
  213. 4090  USECS=0.5:GOSUB 3440:USECS=1
  214. 4100  WHILE NL>0 AND QM=-1                                       'GO...
  215. 4110  '
  216. 4120     PRINT USING "&";TICK;
  217. 4130     FOR U = 1 TO UF
  218. 4140             X=INKEY$
  219. 4150             IF X<="9" AND X>="1" THEN QM=VAL(X)-1:GOSUB 3300'HILITE Q
  220. 4160             IF NM AND (X="0") THEN QM=9:GOSUB 3340          'HILITE Q
  221. 4165             IF X="Q" OR X="q" THEN QM=86
  222. 4166             IF X=ESC$ THEN QM=101
  223. 4170             IF QM<>-1 THEN U=UF
  224. 4180             NEXT
  225. 4190             '
  226. 4200     NL=NL-1
  227. 4210     WEND
  228. 4220  '
  229. 4230  IF QM=PM THEN PLAY T(4) ELSE IF QM=-1 THEN PLAY T(3) ELSE PLAY T(2)
  230. 4240  '
  231. 4250  GOSUB 3210                                                 'FADE TO Q
  232. 4260  IF QM=9 THEN GOSUB 3360                                    'STOP BLINK
  233. 4270  IF QM<>PM THEN IG=M(LP(12)):GOSUB 3010                     'FADE IN P
  234. 4275  COLOR 15: IG=9: GOSUB 3010: COLOR 7                        'HILITE TARGET
  235. 4280  IF QM=-1 OR QM=PM THEN 4340                                'SCORE QM
  236. 4290  '
  237. 4300  LP(16)=LP(16)-1                                            'LOSE A LIFE
  238. 4310  GOSUB 3460                                                 'RUB IT IN
  239. 4320  RETURN
  240. 4330  '
  241. 4340  N=0:IF QM=PM THEN N=50                                     'CORRECT ANSWER
  242. 4350  IF PM<>9 THEN 4360
  243. 4351  IF PM=QM THEN N=100
  244. 4352  IF QM=-1 THEN N=-50
  245. 4360  J=0:IF QM=PM THEN J=NL*LP(17)                              'BONUS
  246. 4370  LP(14)=LP(14)+N+J:LP(13)=LP(13)+N+J                        'UPDATE SCORES
  247. 4380  GOSUB 3480                                                 'HILITE SCORES
  248. 4390  '
  249. 4400  IF TR="" OR LP(14)<LP(15) THEN 4450
  250. 4410  PLAY TR:TR=""                                              'MADE GOALSCORE
  251. 4420  COLOR 15:IG=14:GOSUB 3110                                  'HILITE GOAL
  252. 4430  IG=15:GOSUB 3110:COLOR 7                                   '& RNDSCORE
  253. 4440  '
  254. 4450  IF LP(13)<LP(18) THEN RETURN
  255. 4460  '
  256. 4470  LP(16)=LP(16)+1:LP(18)=LP(18)+2000                         'GET A LIFE
  257. 4480  PLAY "P2":PLAY T(6):GOSUB 3460                             'HILITE IT
  258. 4490  IF LP(18)<25000 THEN RETURN
  259. 4500  '
  260. 4510  LP(18)=2000:LP(13)=LP(13) MOD 2000                         'OVERFLOW
  261. 4520  RETURN                                                     'END OF DEAL
  262. 4530  '
  263. 4540  '
  264. 5000  PM=-1:LP(14)=0:LP(15)=0:LP(16)=0
  265. 5010  WHILE LP(14)>=LP(15) AND LP(16)>=0
  266. 5020     '
  267. 5030     GOSUB 5500                                      'INIT GAME/ROUND
  268. 5040     WHILE LP(12)<=M(16) AND LP(16)>=0
  269. 5050     '
  270. 5060             GOSUB 5860                              'INIT DEAL
  271. 5070             GOSUB 4000                              'PLAY & SCORE IT
  272. 5075             IF QM=86 THEN 5000
  273. 5076             IF QM=101 THEN 9000                     'EXIT GAME
  274. 5080             USECS=1.3:GOSUB 3440
  275. 5090             GOSUB 3260                              'FADE P & T
  276. 5100             GOSUB 3390                              'CLEAR TIMER
  277. 5110             GOSUB 3190                              'LOLITE SCORES
  278. 5120  '          USECS=.5:GOSUB 3400                     'AND FADE...
  279. 5130             LP(12)=LP(12)+1
  280. 5140             WEND
  281. 5150     WEND
  282. 5160  '
  283. 5170  PLAY T(1)
  284. 5180  COLOR 15:IG=13:GOSUB 3110:COLOR 7                  'HILITE GAME SCORE
  285. 5190  GOTO 5000
  286. 5200  '
  287. 5500  IF PM<>-1 THEN 5650                                'INIT GAME/ROUND
  288. 5510  PLAY T(0)                                          'INIT SOUNDS
  289. 5514  LOCATE ,,1                                         'TURN ON CURSOR
  290. 5515  GOSUB 7000                                         'INPUT ROUTINE
  291. 5516  LOCATE ,,0                                         'TURN CURSOR OFF
  292. 5520  LOCATE 1,32: COLOR 31
  293. 5530  PRINT "TIC TAC GO!"
  294. 5535  COLOR 7
  295. 5550  GOSUB 2000                                         'INIT DISPLAY
  296. 5560  GOSUB 1550                                         'SHUFFLE DISPLAY
  297. 5570  LP(11)=0                                           'ROUND NUMBER
  298. 5580  LP(13)=0                                           'GAMESCORE
  299. 5590  LP(15)=0                                           'GOAL SCORE
  300. 5600  LP(16)=3                                           'LIVES
  301. 5610  LP(18)=2000                                        'GET A LIFE INCREMENT
  302. 5620  RESTORE 2250                                       'RESET TIMER SEQUENCE
  303. 5630  '
  304. 5650  LP(11)=LP(11)+1                                    'ROUND NUMBER
  305. 5660  LP(12)=1                                           'DEAL NUMBER
  306. 5670  LP(14)=0                                           'ROUND SCORE
  307. 5680  LP(15)=LP(15)+50                                   'GOAL SCORE
  308. 5690  GOSUB 2260                                         'SET TIMER (NT)
  309. 5700  LP(17)=5*((LP(15)\(8*NT))\5)                       'SET UNIT BONUS
  310. 5710  TR=T(5)                                            'RND>=GOAL TUNE
  311. 5720  GOSUB 6500                                         'INIT R()
  312. 5730  GOSUB 2470                                         'INIT G(0...8)
  313. 5740  GOSUB 5970                                         'INIT M()
  314. 5750  IF PM<>-1 THEN 5780
  315. 5760  CLS:GOSUB 3060                                     'REDRAW BOARD
  316. 5770  COLOR 15:GOSUB 3090:COLOR 7                        'HILITE TIMER
  317. 5780  PLAY T(1)                                          'AVANTI...
  318. 5800  COLOR 7:GOSUB 3190                                 'LO-LITE SCORES
  319. 5810  COLOR 15:IG=13:GOSUB 3110                          'HILITE GAME &
  320. 5820  IG=15:GOSUB 3110:COLOR 7                           '& GOAL SCORES
  321. 5830  USECS=1.5:GOSUB 3440                               'HOLD...
  322. 5840  RETURN
  323. 5850  '
  324. 5860  IF NW=0 AND LP(12)>1 THEN G(M(LP(12)-1))=""        'INIT DEAL
  325. 5870  IF NW THEN GOSUB 5930                              'SHUFFLE DISPLAY
  326. 5880  PM=M(LP(12)):G(9)=G(PM)                            'SET LOGICAL MATCH
  327. 5890  IF PM=9 THEN GOSUB 2410                            'CONSTRUCT NOMATCH
  328. 5900  PM=LP(PM)                                          'BOARD INDEX - 1
  329. 5910  RETURN
  330. 5920  '
  331. 5930  N=INT(RND*9)                                       'QSHUF LP(0...8)
  332. 5940  FOR J = 0 TO 8:LP(J)=(2*(LP(J)+N)) MOD 9:NEXT
  333. 5950  RETURN
  334. 5960  '
  335. 5970  P=8                                                        'INIT M()  (NM)
  336. 5980  IF NM THEN P=P+INT(RND*8)                                  'NOMATCHES
  337. 5990  FOR J = 0 TO 8:M(J)=J:M(J+7)=9:NEXT
  338. 6000  N=P\2:WHILE N>0:FOR I = N TO P:FOR J = I-N TO 0 STEP -N
  339. 6010     IF RND>=0.5 THEN SWAP M(J),M(J+N) ELSE J=-1
  340. 6020     NEXT J,I:N=N\2:WEND
  341. 6030  '
  342. 6040  M(16)=P
  343. 6050  RETURN
  344. 6052  '
  345. 6440  '
  346. 6500  IF NV=0 AND PM>-1 THEN RETURN                              'NO CHANGE
  347. 6505  X=" ":CP=C
  348. 6510  IF NB=0 THEN 6550
  349. 6520  N=176+INT(RND*48)                                          'SET NO-BLANK
  350. 6530  X=CHR$(N)
  351. 6540  '
  352. 6550  N=0
  353. 6551  Y=MID$(CP,P(N)+1,1):N=(N+1) MOD 16:IF Y=X THEN 6551
  354. 6552  Z=MID$(CP,P(N)+1,1):N=(N+1) MOD 16:IF Z=X OR Z=Y THEN 6552
  355. 6553  '
  356. 6555  IF LV<3 THEN LV=INT(RND*3)+1
  357. 6560  ON LV GOTO 6570,6580,6590,6600,6610
  358. 6570  X=X+X:Y=Y+Y:GOTO 6650                                      'LV=1
  359. 6580  Y=Y+X:X=X+X:GOTO 6650                                      'LV=2
  360. 6590  Z=X:X=X+Y:Y=Y+Z:GOTO 6650                                  'LV=3
  361. 6595  '
  362. 6600  X=X+Y:Y=Y+Z:GOTO 6650                                      'LV=4
  363. 6610  X=Y+X:Y=Z+MID$(CP,P(2)+1,1)                                'LV=5
  364. 6620  '
  365. 6650  R(0)=FNB(X+X):R(1)=FNB(X+Y)
  366. 6660  R(2)=FNB(Y+X):R(3)=FNB(Y+Y)
  367. 6670  RETURN
  368. 6680  '
  369. 6700  GOSUB 6060:GOSUB 6500:GOSUB 2470
  370. 6710  CLS:GOSUB 3150:GOTO 6700
  371. 6720  '
  372. 6800  LOCATE 22,4:PRINT "PZ,LV,MD,NV,NB,NM,NW"
  373. 6810  PRINT "   ";PZ-1;LV;MD+1;NV+1;NB+1;NM+1;NW+1
  374. 6820  RETURN
  375. 6830  '
  376. 7000  CLS                                        'USER INTERFACE
  377. 7010  LOCATE 1,32
  378. 7020  COLOR 15
  379. 7030  PRINT "TIC TAC GO!"
  380. 7040  COLOR 7
  381. 7050  LOCATE 4,1
  382. 7060  PRINT "  To set options: press indicated key. Any other key will default"
  383. 7070  PRINT "option to value it had previously. Typing Q or q will immediately"
  384. 7080  PRINT "start a new game. <ESC> will exit game and return to BASIC"
  385. 7090  '
  386. 7100  GOSUB 7170
  387. 7110  PRINT "    1=SMALL 2=MEDIUM 3=LARGE 4=JUMBO 5=COLOSSAL  ";
  388. 7120  GOSUB 3430                         'CLEAR KEY BUF
  389. 7130  X=INPUT$(1): N=VAL(X)+1: IF N>1 AND N<7 THEN PZ=N
  390. 7140  IF X="Q" OR X="q" THEN RETURN
  391. 7145  IF X=ESC$ THEN 9000
  392. 7150  GOSUB 7170: GOTO 7260
  393. 7160  '
  394. 7170  LOCATE 9,1: PRINT SPACE$(79)
  395. 7180  LOCATE 9,1: PRINT "Pattern size now: ";
  396. 7190  X=""
  397. 7200  IF PZ=2 THEN X="SMALL" ELSE IF PZ=3 THEN X="MEDIUM" ELSE IF PZ=4 THEN X="LARGE"
  398. 7210  IF PZ=5 THEN X="JUMBO" ELSE IF PZ=6 THEN X="COLOSSAL"
  399. 7220  IF X="" THEN PZ=3:GOTO 7200
  400. 7230  COLOR 15: PRINT X;: COLOR 7
  401. 7240  RETURN
  402. 7250  '
  403. 7260  GOSUB 7330
  404. 7270  GOSUB 3430
  405. 7280  PRINT "    Y/N  ";:X=INPUT$(1)
  406. 7290  IF X="y" OR X="Y" THEN NV=1 ELSE IF X="N" OR X="n" THEN NV=0
  407. 7300  IF X="Q" OR X="q" THEN RETURN
  408. 7305  IF X=ESC$ THEN 9000
  409. 7310  GOSUB 7330: GOTO 7410
  410. 7320  '
  411. 7330  LOCATE 11,1: PRINT SPACE$(79)
  412. 7340  LOCATE 11,1: PRINT "Characters used vary from round to round: ";
  413. 7350  X=""
  414. 7360  IF NV=0 THEN X="NO" ELSE IF NV=1 THEN X="YES"
  415. 7370  IF X="" THEN NV=1: GOTO 7360
  416. 7380  COLOR 15: PRINT X;: COLOR 7
  417. 7390  RETURN
  418. 7400  '
  419. 7410  GOSUB 7480
  420. 7420  GOSUB 3430
  421. 7430  PRINT "    1=BEGINNER  2=ADVANCED  ";:X=INPUT$(1): N=VAL(X)-1
  422. 7440  IF N>=0 AND N<=1 THEN NB=N
  423. 7450  IF X="Q" OR X="q" THEN RETURN
  424. 7455  IF X=ESC$ THEN 9000
  425. 7460  GOSUB 7480: GOTO 7550
  426. 7470  '
  427. 7480  LOCATE 13,1: PRINT SPACE$(79)
  428. 7490  LOCATE 13,1: PRINT "Ability level: ";:X=""
  429. 7500  IF NB=0 THEN X="BEGINNER" ELSE IF NB=1 THEN X="ADVANCED"
  430. 7510  IF X="" THEN NB=0: GOTO 7500
  431. 7520  COLOR 15: PRINT X;: COLOR 7
  432. 7530  RETURN
  433. 7540  '
  434. 7550  GOSUB 7620
  435. 7560  GOSUB 3430
  436. 7570  PRINT "    1=EASY  2=MEDIUM  3=HARD  ";: X=INPUT$(1): N=VAL(X)
  437. 7580  IF N=1 THEN LV=1 ELSE IF N=2 THEN LV=4 ELSE IF N=3 THEN LV=5
  438. 7590  IF X="Q" OR X="q" THEN RETURN
  439. 7595  IF X=ESC$ THEN 9000
  440. 7600  GOSUB 7620: GOTO 7690
  441. 7610  '
  442. 7620  LOCATE 15,1: PRINT SPACE$(79)
  443. 7630  LOCATE 15,1: PRINT "Difficulty level: ";: X=""
  444. 7640  IF LV>0 AND LV<4 THEN X="EASY" ELSE IF LV=4 THEN X="MEDIUM" ELSE IF LV=5 THEN X="HARD"
  445. 7650  IF X="" THEN LV=1: GOTO 7640
  446. 7660  COLOR 15: PRINT X;: COLOR 7
  447. 7670  RETURN
  448. 7680  '
  449. 7690  GOSUB 7750
  450. 7700  PRINT "    Y/N  ";: X=INPUT$(1)
  451. 7710  IF X="Y" OR X="y" THEN NW=1 ELSE IF X="N" OR X="n" THEN NW=0
  452. 7720  IF X="Q" OR X="q" THEN RETURN
  453. 7725  IF X=ESC$ THEN 9000
  454. 7730  GOSUB 7750: GOTO 7820
  455. 7740  '
  456. 7750  LOCATE 17,1: PRINT SPACE$(79)
  457. 7760  LOCATE 17,1: PRINT "No-wipe option selected: ";: X=""
  458. 7770  IF NW=0 THEN X="NO" ELSE IF NW=1 THEN X="YES"
  459. 7780  IF X="" THEN NW=0: GOT 8020
  460. 7790  COLOR 15: PRINT X;: COLOR 7
  461. 7800  RETURN
  462. 7810  '
  463. 7820  GOSUB 7890
  464. 7830  GOSUB 3430
  465. 7840  PRINT "    Y/N  ";: X=INPUT$(1)
  466. 7850  IF X="Y" OR X="y" THEN NM=1 ELSE IF X="N" OR X="n" THEN NM=0
  467. 7860  IF X="Q" OR X="q" THEN RETURN
  468. 7865  IF X=ESC$ THEN 9000
  469. 7870  GOSUB 7890: GOTO 7941
  470. 7880  '
  471. 7890  LOCATE 19,1: PRINT SPACE$(79)
  472. 7900  LOCATE 19,1: PRINT "No-match option selected: ";: X=""
  473. 7910  IF NM=0 THEN X="NO" ELSE IF NM=1 THEN X="YES"
  474. 7920  IF X="" THEN NM=0: GOTO 7910
  475. 7930  COLOR 15: PRINT X;: COLOR 7
  476. 7940  RETURN
  477. 7941  IF XFLAG%= 0 THEN GOTO 7960
  478. 7942  LOCATE 21,1:PRINT SPACE$(79)
  479. 7943  LOCATE 21,1:PRINT "Turn sound off...(Y/N)  ";
  480. 7944  GOSUB 3430:X$=INPUT$(1)
  481. 7945  IF X="Q" OR X="q" THEN RETURN
  482. 7946  IF X=ESC$ THEN 9000
  483. 7947  IF X$<>"Y" AND X$<>"y" THEN LOCATE 21,1:PRINT SPACE$(77):LOCATE 21,1:PRINT "SOUND";:COLOR 15:PRINT " ON":GOTO 7960
  484. 7948  LOCATE 21,1:PRINT SPACE$(79)
  485. 7949  LOCATE 21,1:PRINT "SOUND ";:COLOR 15:PRINT "OFF"
  486. 7950  '
  487. 7956  XFLAG%=0:FOR J=0 TO 9:T(J)="":NEXT
  488. 7960  LOCATE 23,1:PRINT SPACE$(79)
  489. 7970  LOCATE 23,1: PRINT "Any changes...(Y/N)  ";
  490. 7980  GOSUB 3430
  491. 7990  X=INPUT$(1)
  492. 8000  LOCATE 21,1: PRINT SPACE$(79)
  493. 8010  IF X="Y" OR X="y" THEN 7000
  494. 8015  IF X=ESC$ THEN 9000
  495. 8020  RETURN
  496. 8030  '
  497. 9000  CLS:PRINT "goodbye...."
  498. 9010  REM restore function keys, etc
  499. 9020  END
  500. 9030  '
  501.